package com.taoyeshu.modules.sys.service;

import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.taoyeshu.common.utils.PageResult;
import com.taoyeshu.modules.sys.entity.User;
import com.taoyeshu.modules.sys.mapper.UserMapper;
import com.taoyeshu.modules.sys.query.UserQuery;

@Service("userService")
@Transactional(readOnly = true)
public class UserService {

	@Resource
	UserMapper userMapper;

	/*
	 * 新增
	 */
	@Transactional(readOnly = false)
	public int save(User t) {
		t.setCreateTime(new Date());
		t.setState(1);
		return userMapper.save(t);
	}

	/*
	 * 修改
	 */
	@Transactional(readOnly = false)
	public int update(User user) {
		userMapper.update(user);
		return user.getId();
	}

	/*
	 * 删除
	 */
	@Transactional(readOnly = false)
	public void delete(User user) {
		user.setState(2);
		update(user);
	}

	/**
	 * 
	 * @描述:根据Id查询用户
	 * @方法名称 :getById
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:46:05
	 * @param id
	 *
	 */
	public User getById(int id) {
		return userMapper.getById(id);
	}

	/**
	 * 根据用户名查询用户
	 * 
	 * @描述:
	 * @方法名称 :queryByUsername
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:46:21
	 * @param username
	 *
	 */
	public User queryByUsername(String username) {
		return userMapper.queryByUsername(username);
	}

	/**
	 * 
	 * @描述:根据查询对象查询分页数据
	 * @方法名称 :findPageResult
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月5日 下午10:46:34
	 * @param userQuery
	 *            查询对象
	 *
	 */
	public PageResult<User> findPageResult(UserQuery userQuery) {
		PageResult<User> result = new PageResult<>();
		result.setPage(userQuery.getPage());
		result.setPageSize(userQuery.getRows());
		int count = userMapper.findCount(userQuery);
		if (count == 0) {
			return result;
		}
		int first = (userQuery.getPage() - 1) * userQuery.getRows();
		int max = userQuery.getRows();
		List<User> list = userMapper.findList(userQuery, first, max);
		result.setRows(list);
		result.setRecords(count);
		return result;
	}

	/**
	 * 
	 * @描述:删除用户角色关联
	 * @方法名称 :removeUR
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月6日 下午5:49:16
	 * @param id
	 *
	 */
	public void removeUR(Integer userId) {
		userMapper.removeUR(userId);
	}

	/**
	 * 
	 * @描述:保存用户角色关联
	 * @方法名称 :saveUR
	 * @作者 :HuanGe
	 * @创建日期 :2015年10月6日 下午5:52:52
	 * @param id userId
	 * @param roleIds 角色id集
	 *
	 */
	public void saveUR(Integer userId, List<Integer> roleIds) {
		for (Integer roleId : roleIds) {
			userMapper.saveUR(userId,roleId);
		}
	}

}
